import axios from 'axios'
import router from '../router'
import { useUserStore } from '../stores/user'
import { ElMessage } from 'element-plus'

// 根据环境动态设置 baseURL
const baseURL = import.meta.env.MODE === 'development' 
  ? '/api'  // 开发环境使用 Vite 代理
  : '/api'; // 生产环境使用 Nginx 代理（相对路径）

const api = axios.create({
  baseURL, // 使用动态设置的 baseURL
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 在发送请求之前做一些处理，例如添加token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`
    }
    return config
  },
  error => {
    // 处理请求错误
    console.error('Request error:', error)
    return Promise.reject(error)
  }
)

// 处理token过期的函数
const handleTokenExpired = () => {
  const userStore = useUserStore()
  
  // 清除用户状态
  userStore.logout()
  
  // 显示提示消息
  ElMessage.error('登录已过期，请重新登录')
  
  // 保存当前路径以便登录后重定向回来
  const currentPath = router.currentRoute.value.fullPath
  const redirectPath = currentPath && currentPath !== '/login' ? currentPath : '/'
  
  // 重定向到登录页面
  router.push({
    path: '/login',
    query: { redirect: redirectPath }
  })
}

// 响应拦截器
api.interceptors.response.use(
  response => {
    // 直接返回完整响应体，包含code/msg/result
    return response.data
  },
  error => {
    // 处理响应错误
    if (error.response) {
      const status = error.response.status
      const errorData = error.response.data

      // 处理文件上传大小超限错误
      if (errorData && errorData.includes('Maximum upload size exceeded')) {
        ElMessage.error('文件大小超过限制，请上传小于10MB的文件')
        return Promise.reject(error)
      }

      // 处理认证错误
      if (status === 401) {
        // 只有在非文件上传请求时才处理token过期
        if (!error.config.url.includes('/upload')) {
          handleTokenExpired()
        }
      } else if (status === 403) {
        console.warn('Forbidden')
        ElMessage.warning('您没有权限访问此资源')
      } else if (status === 500) {
        console.error('Server error')
        ElMessage.error('服务器错误，请稍后再试')
      }
    } else if (error.request) {
      // 请求已发出，但没有收到响应
      console.error('No response from server')
      ElMessage.error('无法连接到服务器，请检查网络连接')
    } else {
      // 设置请求时发生错误
      console.error('Request configuration error')
      ElMessage.error('请求配置错误')
    }
    return Promise.reject(error)
  }
)

export default api 